package me.send.framework.util;

import java.util.Map;

import com.google.gson.Gson;

/**
 * 主要提供给第三方使用地图的 使用
 *  -- GetLocationCityGeocoding 百度地图 方法参数主要是2个 x y 通过经纬度 获取城市的名称
 * 编辑时间：2015年6月9日15:13:28 编辑人：杨中仁
 * 
 *  -- geocoding_location 百度地图 方法参数主要是2个 x y 通过经纬度 获取json的值得map
 * 编辑时间：2015年6月9日15:14:27 编辑人：杨中仁
 * 
 *  -- geocoding_location 百度地图 方法参数主要是3个 Result的枚举 里面主要是2个类型 一个是json 还有一个是xml
 * 默认是json的 传值得时候 直接传null 编辑时间：2015年6月9日15:15:43 编辑人：杨中仁
 * 
 * @version V-1.0
 * 
 * @author 杨中仁
 * 
 */
public class BaseMap {
	
	/** 定义map url的地址 2015年6月9日11:47:13 * */
	private static final String MAP_GEOCODING_LOCATION_URL = "http://api.map.baidu.com/geocoder/v2/?ak={ak}&callback={callback}&location={x,y}&output={output}&pois=1";

	/** 定义 key 的地址 2015年6月9日11:47:13 * */
	private static final String MAP_AK = "aaxgW127BVUDgI0QGkZ8yKna";

	/** 设置返回类型 2015年6月9日11:53:42 json 和 xml * */
	public enum ResultEnum {
		/** 设置 返回的类型 支持json 和 xml * */
		JSON, XML
	}

	/** 解析下面的数据 使得获取的城市 2015年6月9日15:08:11 提供给 热门城市使用 * */
	@SuppressWarnings("unchecked")
	public static String GetLocationCityGeocoding(String x, String y) {
		Map<String, Object> map = geocoding_location(x, y);
		Map<String, Object> result_map = (Map<String, Object>) map
				.get("result");
		// 获取 addressComponent 地址
		Map<String, Object> addressComponent = (Map<String, Object>) result_map
				.get("addressComponent");
		String cityname = addressComponent.get("city").toString();
		// 返回城市名称
		return cityname;
	}

	// 在没有格式的情况下 调用在这个方法 2015年6月9日15:07:31
	public static Map<String, Object> geocoding_location(String x, String y) {
		return geocoding_location(null, x, y);
	}

	// ak=aaxgW127BVUDgI0QGkZ8yKna&callback=renderReverse&location=39.983424,116.322987&output=json&pois=1
	/** 提供百度地图 根据经纬度获取 详细地址 对象 2015年6月9日11:43:41 * */
	@SuppressWarnings("unchecked")
	public static Map<String, Object> geocoding_location(ResultEnum resultEnum,
			String x, String y) {
		// 判断 结果的枚举是否是null 默认是给json
		if (resultEnum == null) {
			resultEnum = ResultEnum.JSON;
		}
		final String callback = "renderReverse";
		// 处理获取的链接
		String url = MAP_GEOCODING_LOCATION_URL.replace("{ak}", MAP_AK)
				.replace("{callback}", callback).replace("{x,y}", x + "," + y)
				.replace("{output}", resultEnum.toString().toLowerCase());
		// 获取链接下面的 返回的参数 2015年6月9日14:22:56
		String context = BaseURL.GetContextURL(url);
		context = context.substring(context.indexOf("(") + 1,
				context.length() - 1);

		Gson gson = new Gson();
		Map<String, Object> map = gson.fromJson(context, Map.class);
		return map;
	}
}
